#pragma once
#include<iostream>
#include<stdint.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<string.h>
#include<unistd.h>
#include<vector>

typedef std::vector<std::pair<std::string, int>> route_set;
typedef route_set::iterator route_set_it;

// 主要是针对lars提供的一些核心接口
class lars_client{

public:
    lars_client();
    ~lars_client();

    // 在使用一个mod之前，提前注册当前mod
    int reg_init(int modid, int cmdid);
    
    // lars获取host信息，得到可用的hostIP和port
    int get_host(int modid, int cmdid, std::string &ip, int &port);
    
    // api获取当前modid和cmdid下的全部host信息
    int get_route(int modid, int cmdid, route_set &route);

    // api上报给agent host的调用情况
    int report_host(int modid, int cmdid, std::string ip, int port, int retcode);

private:
    // 对应三个lars的udp server
    int _sockfd[3];

    // 代表一个消息的序号，用来判断回的消息包和发送的消息包是否是相对等的
    uint32_t _seqid;
    
};